import {  
    HTTP_REQUEST_URL,  
    HEADER,  
    TOKENNAME,  
    HEADERPARAMS  
} from '@/config/app';  
import {  
    toLogin  
} from './login';  
import {  
    Toast  
} from './utils.js';  
import store from '../store';  
/**  
 * 发送网络请求  
 * @param {string} url - 请求的 API 地址  
 * @param {string} method - 请求方法（默认为 'GET'）  
 * @param {Object} data - 请求数据（默认为空对象）  
 * @param {Object} options - 可选参数，包含 noAuth（是否需要授权）和 params（是否使用特殊 header）  
 * @returns {Promise} - 返回 Promise 对象  
 */  
function baseRequest(url, method = 'GET', data = {}, options = {}) {  
    const { noAuth = false, params = false } = options;  
    let finalHeader = params ? HEADERPARAMS : HEADER;  
    const token = store.state.app.token;  
    if (!noAuth && !token) {  
        // 如果需要授权但没有 token，则跳转到登录页面  
        toLogin();  
        return Promise.reject(new Error('未登录，请登录后重试'));  
    }  
    if (!noAuth) {  
        // 添加 token 到 header 中  
        finalHeader[TOKENNAME] = token;  
    }  
  
    return new Promise((resolve, reject) => {  
        uni.request({  
            url: `${HTTP_REQUEST_URL}${url}`,  
            method: method,  
            header: finalHeader,  
            data: data,  
            success: (res) => {  
                if (res.statusCode === 200) {  
                    const { code, } = res.data;  
                    if (code === 1) {  
                        resolve(res.data);  
                    } else if (code === 401) {  
                        // 处理 token 无效的情况  
                        toLogin();  
                        reject(new Error('Token 无效，请重新登录'));  
                    } else {  
						Toast(res.data.msg)
                        reject(new Error(res.data.msg));  
                    }  
                } else {  
                    reject(new Error('请求失败'));  
                }  
            },  
            fail: (err) => {  
                // 请求失败时的处理  
                reject(new Error( err.message));  
            }  
        });  
    });  
}  
  
// 创建请求方法对象  
const requestMethods = ['options', 'get', 'post', 'put', 'head', 'delete', 'trace', 'connect'];  
const request = {};  
requestMethods.forEach((method) => {  
    request[method.toLowerCase()] = (api, data, options, params) => {  
        return baseRequest(api, method, data, options, params);  
    };  
});  
  
export default request;